"use strict";
// 1.合并声明
// 同一名称的两个独立声明会被合并成一个单一声明
// 合并后的声明拥有原先两个声明的特性
// 关键字	        作为类型使用	作为值使用
// class	        yes	            yes
// enum	            yes	            yes
// interface	    yes	            no
// type	            yes	            no
// function	        no	            yes
// var,let,const	no	            yes
// 类既可以作为类型使用，也可以作为值使用，接口只能作为类型使用
/**
 *声明一个类的时候
 *得到两个类型，一个是构造函数的类型，一个是实例的类型
 */
var Person = /** @class */ (function () {
    function Person() {
        this.name = '';
    }
    return Person;
}());
var p1; //作为类型使用
var p2 = new Person(); //作为值使用
// 从这个types\animal\index.d.ts文件中，可以得到Animal其他接口
var a1 = { name: 'ikki', age: 10 };
console.log(a1.name);
console.log(a1.age);
// 3.使用命名空间扩展类
var Form = /** @class */ (function () {
    function Form() {
        this.username = '';
        this.password = '';
    }
    return Form;
}());
(function (Form) {
    var Item = /** @class */ (function () {
        function Item() {
        }
        return Item;
    }());
    Form.Item = Item;
})(Form || (Form = {}));
var item = new Form.Item();
console.log(item);
// 4.使用命名空间扩展函数
function greeting(name) {
    return greeting.words + name;
}
(function (greeting) {
    greeting.words = "Hello,";
})(greeting || (greeting = {}));
console.log(greeting('ikki'));
// 5.使用命名空间扩展枚举类型
var Color;
(function (Color) {
    Color[Color["red"] = 1] = "red";
    Color[Color["yellow"] = 2] = "yellow";
    Color[Color["blue"] = 3] = "blue";
})(Color || (Color = {}));
(function (Color) {
    Color.green = 4;
    Color.purple = 5;
})(Color || (Color = {}));
console.log(Color.green);
// 6.生成声明文件
// 把TS编译成JS后丢失类型声明，我们可以在编译的时候自动生成一份JS文件
// {
//     "compilerOptions": {
//        "declaration": true, /* Generates corresponding '.d.ts' file.*/
//     }
// }
